package doc2db.table;

import doc2db.Keey;

/**
 *  <p><b>Класс Таблици</b></p>
 * @author yuriy
 */
public class DocTable {

    public static final String NEXT = "__NEXT_";
    private DocTableHead head = new DocTableHead();
    private DocTableBody body = new DocTableBody();
    private String tableName = null;

    public DocTable() {
    }

    /**
     * добавить ячейку заголовка
     * @param text содержимое ячейки
     */
    public void addHeadCell(String text) {
        head.add(text);
    }

    /**
     * добавить ячейку заголовка
     * @param text содержимое ячейки
     * @param len длина ячейки
     */
    public void addHeadCell(String text, int len) {
        head.add(text, len);
    }

    /**
     * добавить ячейку заголовка
     */
    public void addHeadCell(DocTableCell c) {
        head.add(c);
    }

    /**
     * добавить ячейку к телу таблици
     * @param text содержимое ячейки
     * @param h заголовок ячейки
     */
    public void addBodyCell(String text, String h) {
        if (h.equals(NEXT)) {
            String s = "";
            try {
                s = head.get()[body.getCurrentRows().size()];
            } catch (Exception e) {
                System.err.println(">NULL in ading cell : " + text);
                s = "NULL";
            }
            body.getCurrentRows().add(text, s);
        } else {
            body.getCurrentRows().add(text, h);
        }
    }

    /**
     * добавить ячейку к телу таблици
     * @param text содержимое ячейки
     * @param h заголовок ячейки
     * @param len длина ячейки
     */
    public void addBodyCell(String text, String h, int len) {
        if (h.equals(NEXT)) {
            String s = "";
            try {
                s = head.get()[body.getCurrentRows().size()];
            } catch (Exception e) {
                if (!Keey.isTreeHead) {
                    System.err.println(">NULL in ading cell : " + text);
                }
                s = "NULL";
            }
            body.getCurrentRows().add(text, s, len);
        } else {
            body.getCurrentRows().add(text, h, len);
        }
    }

    /**
     * добавить ячейку к телу таблици
     */
    public void addBodyCell(DocTableCell c) {
        body.getCurrentRows().add(c);
    }

    public void addNewRow() {
        body.createNewRows();
    }

    public String[] getBodySQLString() {
        return body.getInsertSQLString(tableName);
    }

    public String getHeadSQLString(String fileName, int num) {
        if (Keey.tableName && Keey.tableNameValue.trim().length() > 1) {
            tableName = "\"" + Keey.tableNameValue.trim() + (num > 1 ? "" + num : "") + "\"";
        } else {
            tableName = "\"tabel_name_doc2db_" + fileName + num + "\"";
        }
        StringBuilder a = new StringBuilder();
        a.append("CREATE TABLE ");
        a.append(" ");
        a.append(tableName);
        a.append(" ( \n");
        a.append(head.getSQLString());
        a.append(");\n");

        return a.toString();
    }

    public String getDropSQLString(String fileName, int num) {
        if (Keey.tableName && Keey.tableNameValue.trim().length() > 1) {
            tableName = "\"" + Keey.tableNameValue.trim() + (num > 1 ? "" + num : "") + "\"";
        } else {
            tableName = "\"tabel_name_doc2db_" + fileName + num + "\"";
        }
        StringBuilder a = new StringBuilder();
        a.append("DROP TABLE ");
        a.append(" ");
        a.append(tableName);
        a.append(" ;");

        return a.toString();

    }

    public DocTableBody getBody() {
        return body;
    }

    public DocTableHead getHead() {
        return head;
    }

    public String getTableName() {
        return tableName;
    }

    @Override
    public String toString() {
        return tableName + ":\n  head:\n" + head.toString()
                + " \n  body:\n" + body.toString();
    }
}
